package bank;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;

import exception.KontoNotFoundException;
import exception.KundeNotFoundException;
import exception.KundennummerBereitsVergebenException;

public class Kunden {
	
	private final HashMap<Integer, Kunde> kunden;
	
	public Kunden() {
		kunden = new HashMap<Integer, Kunde>();
	}
	
	public Kunde anlegenKunde(String kundenName, int kundenNummer) throws KundennummerBereitsVergebenException {
		Kunde kunde = new Kunde(kundenName, kundenNummer);
		for (Entry<Integer, Kunde> entry : kunden.entrySet()) {
			if (entry.getValue().getKundennummer() == kundenNummer) {
				throw new KundennummerBereitsVergebenException(kundenNummer);
			}
		}
		kunden.put(new Integer(kundenNummer), kunde);
		return kunde;
	}
	
	public Kunde getKundeByKontoNummer(int aKontonummer) throws KontoNotFoundException {
		for (Entry<Integer, Kunde> entry : kunden.entrySet()) {
			for (Konto konto : entry.getValue().getKontenListe()) {
				if(konto.getKontonummer() == aKontonummer){
					return entry.getValue();
				}
			}
		}
		throw new KontoNotFoundException(aKontonummer);
	}
	
	public Kunde getKundeByKundenNummer(int aKundennummer) throws KundeNotFoundException {
		for (Entry<Integer, Kunde> entry : kunden.entrySet()) {
			if (entry.getValue().getKundennummer() == aKundennummer) {
				return entry.getValue();
			}
		}
		throw new KundeNotFoundException(aKundennummer);
	}
	
	public Konto getKontoByKontoNummer(int akontoNummer) throws KontoNotFoundException {
		//Konto[] kontenTransfer = new Konto[2];
		try{
			Konto kunde = getKundeByKontoNummer(akontoNummer).getKonto(akontoNummer);
			return kunde;
		} catch(Exception ex){
			throw new KontoNotFoundException(akontoNummer);
		}
	}
	
	public java.util.List<Kunde> getKundenListe() {
		List<Kunde> temp = new ArrayList<Kunde>();
		for (Entry<Integer, Kunde> entry : kunden.entrySet()) {
			temp.add(entry.getValue());
		}
		return temp;
	}
}
